\section{Challenges}
During the implementation phase of the project we encountered certain challenges. In this section the nature of these challenges and how they were overcome will be discussed.

\subsection{Computation speed}
The computational costs of calculating the eigenspace from a laplacian matrix is O(n$^{3}$) \citet*{eig1} We tested the performance of two separate C\# libraries, alglib and meta numerics, for solving the eigenspace problem and predicted computation times based on the results. For the biggest models this would mean days of computation time, which we didn't have. 

During development we verified the eigenspace results of the two libraries using MatLab. We noticed that the computation times for MatLab seemed to be significantly faster than those of the two libraries. The use of MatLab for the program's implementation was normally not allowed, so we asked for permission to use MatLab just to calculate the eigenspace. In our current solution MatLab takes the Laplacian matrices generated by the C\# program and generates files containing eigenvalues and eigenvectors that are in turn used to calculate heat kernel values in the C\# program.

\subsection{Memory}
A readily apparant problem is that of memory. The largest model in the collection that was supplied to us for testing consists of roughly 45.000 vertices. To calculate the eigenspace for this model, a Laplacian matrix with 45.000 x 45.000 cells is needed. If we were to use doubles for the matrix values, this would result in a memory load of at least 45.000 $\times$ 45.000 $\times$ 4 bytes, or about 8 GB of memory. Since each vertex of even the largest model was unlikely to be connected to a great number of other vertices, each row of the Laplacian matrix would have a large proportion of empty cells compared to cells with a value.

Taking this into account, a logical solution was to use a sparse matrix implementation to limit the memory load. Though we had initially developed our own implementation of sparse matrices to work with meta numerics, once we settled on using MatLab for eigenspace computation we were able to simply use Matlab's existing sparse matrix implementation.

\subsection{Selection of eigenvectors}
Using all eigenvectors and eigenvalues in the final computation of the heat kernel values would of course take a significant amount of time. To reduce the computation time it would be advisable to use only those eigenvalues and eigenvectors that are most characteristic of the model. In the paper itself, a set amount of 300 eigenvalue/eigenvector pairs is used. This amount gives both enough data to calculate accurate heat kernel values and is also low enough that most models can be compared with the same method, since most models will have at least 300 vertices and thus 300 eigenvalue/eigenvector pairs. We decided to reduce the number of eigenvectors to 250, because we still had problems involving eigenvalues with a value of zero with a particular few models in the test set provided to us. 

\subsection{Time range}
Most factors in the implementation were more or less set in stone. There is only one correct method to calculate a model Laplacian matrix and the eigenspace thereof. The value used for t is the most flexible factor in the heat kernel signature implementation. We experimented with using both a set interval and one dependent on the eigenvalues. We seemed to get the best results using the method described in the paper \citep{sun}. 

\subsection{Evaluation}
Upon completing our implementation of the algorithm we set out to ascertain its correctness. A problem we ran into here is that the required performance of the algorithm was not precisely defined. Of course we had certain expectations based on the description in \citet{sun} and our understanding of the method, so we knew roughly what results to expect. Though our actual results were more or less in line with our expectations, we were unable to determine whether the method was working exactly as intended, because there were no other results available to compare them to.
\clearpage 